package com.earthea.common.system;

import cn.hutool.system.oshi.CpuInfo;
import cn.hutool.system.oshi.OshiUtil;
import com.earthea.common.system.server.Jvm;
import com.earthea.common.system.server.Mem;
import com.earthea.common.system.server.Sys;
import com.earthea.common.system.server.SysFile;
import lombok.Getter;
import oshi.hardware.ComputerSystem;
import oshi.software.os.FileSystem;
import oshi.software.os.OSFileStore;

import java.util.LinkedList;
import java.util.List;

/**
 * 服务器相关信息
 */
@Getter
public class Server {

    /**
     * CPU相关信息
     */
    private final CpuInfo cpu;

    /**
     * 內存相关信息
     */
    private final Mem mem;

    /**
     * JVM相关信息
     */
    private final Jvm jvm;

    /**
     * 服务器相关信息
     */
    private final Sys sys;

    /**
     * 计算机相关信息
     */
    private final ComputerSystem computerSystem;

    /**
     * 磁盘相关信息
     */
    private final List<SysFile> sysFiles = new LinkedList<>();

    public Server() {
        this.cpu = OshiUtil.getCpuInfo();
        this.jvm = new Jvm();
        this.mem = new Mem();
        this.sys = new Sys();
        this.computerSystem = OshiUtil.getSystem();
        setSysFiles();
    }

    /**
     * 设置磁盘信息
     */
    private void setSysFiles() {
        FileSystem fileSystem = OshiUtil.getOs().getFileSystem();
        List<OSFileStore> fsArray = fileSystem.getFileStores();
        for (OSFileStore fs : fsArray) {
            long free = fs.getUsableSpace();
            long total = fs.getTotalSpace();

            SysFile sysFile = new SysFile();
            sysFile.setDirName(fs.getMount());
            sysFile.setSysTypeName(fs.getType());
            sysFile.setTypeName(fs.getName());

            sysFile.setTotal(total);
            sysFile.setFree(free);
            sysFiles.add(sysFile);
        }
    }

}
